package reflect;

import java.io.File;
import java.net.URISyntaxException;

/**
 * 实例化与当前类Test6在同一个包中的所有类
 */
public class Test6 {
    public static void main(String[] args) throws URISyntaxException, ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class c = Test6.class;
        String pack = c.getPackage().getName();

        /*
            思路:
            1:定位Test6.class文件所在的目录(该目录就是Test6所在的包)
            2:利用File的API可以获取该目录下的所有.class文件
            3:java命名规则要求:类名与它对应的字节码文件的名字一致
              好比Person类的字节码文件应当叫:Person.class
              因此我们通过每个class文件的文件名就能得知对应的类名
            4:利用Class.forName加载这个类  Class.forName("包名.类名")
            5:通过类对象实例化
         */
        File dir = new File(c.getResource(".").toURI());
        File[] files = dir.listFiles(f->f.getName().endsWith(".class"));
        for(File f : files){
            String fileName = f.getName();
            //String subName = fileName.substring(0,fileName.lastIndexOf("."));
            String subName = fileName.replace(".class","");

            Class cls = Class.forName(pack+"."+subName);
            System.out.println("实例化类:"+subName);
            Object o = cls.newInstance();
            System.out.println(o);
        }
    }
}
